package com.javanotes2all.java.sound;

import java.awt.Toolkit;  
import javax.sound.sampled.AudioFormat;  
import javax.sound.sampled.AudioSystem;  
import javax.sound.sampled.LineUnavailableException;  
import javax.sound.sampled.SourceDataLine;  
public class Beep {  
     public static float SAMPLE_RATE = 8000f;  
     public static void tone(int hz, int msecs) throws LineUnavailableException {  
          tone(hz, msecs, 1.0);  
     }  
     public static void tone(int hz, int msecs, double vol)  
               throws LineUnavailableException {  
          byte[] buf = new byte[1];  
          AudioFormat af = new AudioFormat(SAMPLE_RATE, // sampleRate  
                    8, // sampleSizeInBits  
                    1, // channels  
                    true, // signed  
                    false); // bigEndian  
          SourceDataLine sdl = AudioSystem.getSourceDataLine(af);  
          sdl.open(af);  
          sdl.start();  
          for (int i = 0; i < msecs * 8; i++) {  
               double angle = i / (SAMPLE_RATE / hz) * 2.0 * Math.PI;  
               buf[0] = (byte) (Math.sin(angle) * 127.0 * vol);  
               sdl.write(buf, 0, 1);  
          }  
          sdl.drain();  
          sdl.stop();  
          sdl.close();  
     }  
     public static void main(String[] args) throws Exception {  
          // Normal Beep sound  
          Toolkit.getDefaultToolkit().beep();  
          Beep.tone(1000, 100);  
          Thread.sleep(1000);  
          Beep.tone(100, 1000);  
          Thread.sleep(1000);  
          Beep.tone(5000, 100);  
          Thread.sleep(1000);  
          Beep.tone(400, 500);  
          Thread.sleep(1000);  
          Beep.tone(400, 500, 0.2);  
     }  
}  